package com.sodimac.v2s.commands
{
	import com.adobe.cairngorm.commands.ICommand;
	import com.adobe.cairngorm.control.CairngormEvent;
	import com.sodimac.util.alerts.alert;
	import com.sodimac.util.commons.EstadosBPM;
	import com.sodimac.util.commons.Session;
	import com.sodimac.util.commons.UtilXml;
	import com.sodimac.v2s.business.SaveOCDelegate;
	import com.sodimac.v2s.events.grabarOrdenDeCompraEvent;
	import com.sodimac.v2s.model.ComprasModelLocator;
	
	import mx.events.CloseEvent;
	import mx.formatters.NumberFormatter;
	import mx.rpc.IResponder;

	public class grabarOrdenDeCompraCommand implements ICommand, IResponder
	{
		private var modelo:ComprasModelLocator = ComprasModelLocator.getInstance();
		private var sesion:Session = new Session();
		private var numOC:Number = 0;
		
		
		public function execute(event:CairngormEvent):void
		{
			var delegate:SaveOCDelegate = new SaveOCDelegate(this);
			var saveEvt:grabarOrdenDeCompraEvent = grabarOrdenDeCompraEvent(event);
			
			numOC = saveEvt.idOC;
			delegate.GrabarOrdenCompra(modelo.cabecera, 
										saveEvt.idPedidoCorp,
										saveEvt.idOC, 
										saveEvt.idPais,
										saveEvt.fechaOC, 
										saveEvt.idEmpresa);
										
		}
		
        public function result(obj: Object): void
        {            
			var xmlList:XMLList;
			var xml:XML = new XML(obj.result);
			xml = UtilXml.removeNamespacesFromXML(xml);
			xmlList = xml.children();

			var result:Number = Number(xmlList.cabecera.@id);
			var glosa:String =  xmlList.cabecera.@glosa;
			trace("WS GrabarOrdenDeCompra response id=" + result); 
			trace("num OC=" + numOC); 
	  	      switch (result){
	  	      case 0:   //Ok
	  	      			
//						var numFormatter:NumberFormatter = new NumberFormatter();
//						numFormatter.precision = 0;
//						numFormatter.useNegativeSign = false;
//						numFormatter.thousandsSeparatorFrom = ".";
//						numFormatter.thousandsSeparatorTo = ".";
//						numFormatter.decimalSeparatorFrom = ",";
//						numFormatter.decimalSeparatorTo =  ",";
//						numFormatter.useThousandsSeparator = true;
						alert.success("La Orden de Compra ha sido generada exitosamente!\n\n" + 
								      "El número de la O/C es:  " +  numOC + ". ",
	  	      						  alertListener); 
	  	      			break;
	  	      			
	  	      case 1:   //Error
	  	      
  	      				alert.error("Ha ocurrido un error:\n\n"+  glosa);
	  	      			break;
	  	      			
	  	      default:  //reintentar
	  	      	  	     alert.info("Problemas con respuesta del servicio, " + 
									"favor reintente mas tarde.\n\n"+ glosa);
	  	      			break;                  	      						
	  	      }

        }
                
        public function fault(obj: Object): void
        {
        	alert.error("Ha ocurrido un error al grabar la OC.");
        	sesion.endSession();
        }	
        
        
		private function alertListener(eventObj:CloseEvent):void 
		{
			
	      	//se envia estado a BPM
			var resp:Object = new Object();
			resp.estado = EstadosBPM.ENVIO;
			resp.codOrdenDeCompra = numOC;
			sesion.callbackBPM(resp);
			sesion.endSession();
		}
	
	
	
		
	}
}